home *** CD-ROM | disk | FTP | other *** search
/ Computer Inter@ctive 16 / Computer Interactive cdrom 16 - dic 98.iso / zdnetit / content / CLASSBLD.ZIP / Include / CB_CriticalSingleOwned.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-20  |  2.3 KB  |  66 lines

  1. #ifndef CB_CRITICAL_SINGLE_OWNED_H
  2. #define CB_CRITICAL_SINGLE_OWNED_H
  3.  
  4. #include "CB_CriticalSingle.h"
  5. #include "CB_SingleOwned.h"
  6.  
  7. // defines for include files
  8. #define RELATION_CRITICAL_SINGLE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  9. public:\
  10.     ClassTo* _ref##NameTo;\
  11. \
  12. public:\
  13.     static CriticalSection _criticalSection##NameTo;\
  14. \
  15. protected:\
  16.     void Add##NameTo(ClassTo* item);\
  17.     void Remove##NameTo(ClassTo* item);\
  18.     void Move##NameTo(ClassTo* item);\
  19.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  20. \
  21. public:\
  22.     ClassTo* Get##NameTo() {return _ref##NameTo;};
  23.  
  24. #define RELATION_CRITICAL_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  25.     RELATION_CRITICAL_SINGLE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  26.  
  27. // defines implementation
  28. #define INIT_CRITICAL_SINGLE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  29.    INIT_SINGLE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  30.  
  31. #define EXIT_CRITICAL_SINGLE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  32. {\
  33.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  34.     EXIT_SINGLE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  35. }
  36.  
  37. #define REPLACE_CRITICAL_SINGLE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  38. {\
  39.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  40.     REPLACE_SINGLE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  41. }
  42.  
  43. #define INIT_CRITICAL_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  44. {\
  45.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  46.     INIT_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  47. }
  48.  
  49. #define EXIT_CRITICAL_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  50. {\
  51.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  52.     EXIT_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  53. }
  54.  
  55. #define REPLACE_CRITICAL_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  56. {\
  57.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  58.     REPLACE_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  59. }
  60.  
  61. #define METHODS_CRITICAL_SINGLE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  62.     METHODS_CRITICAL_SINGLE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) 
  63.  
  64. #define METHODS_CRITICAL_SINGLE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  65.  
  66. #endif